/**
 * 环境变量工具
 * 所有环境变量均以TARO_APP_为前缀
 */

// 环境变量前缀
const ENV_PREFIX = 'TARO_APP_';

/**
 * 安全获取process.env对象
 * @returns 环境变量对象或空对象
 */
const getProcessEnv = () => {
  return (typeof process !== 'undefined' && process.env) ? process.env : {};
};

/**
 * 获取环境变量（字符串类型）
 * @param key 环境变量名称（不含前缀）
 * @param defaultValue 默认值
 * @returns 环境变量值
 */
export function getEnv(key: string, defaultValue: string = ''): string {
  const fullKey = `${ENV_PREFIX}${key}`;
  const envObj = getProcessEnv();
  const value = envObj[fullKey];

  if (value === undefined) {
    console.warn(`环境变量 ${fullKey} 未定义，使用默认值`);
    return defaultValue;
  }

  return value;
}

/**
 * 获取环境变量（数字类型）
 * @param key 环境变量名称（不含前缀）
 * @param defaultValue 默认值
 * @returns 环境变量值
 */
export function getEnvNumber(key: string, defaultValue: number = 0): number {
  const value = getEnv(key, String(defaultValue));
  const num = Number(value);
  return isNaN(num) ? defaultValue : num;
}

/**
 * 获取环境变量（布尔类型）
 * @param key 环境变量名称（不含前缀）
 * @param defaultValue 默认值
 * @returns 环境变量值
 */
export function getEnvBoolean(key: string, defaultValue: boolean = false): boolean {
  const value = getEnv(key, String(defaultValue));
  return value.toLowerCase() === 'true';
}

/**
 * 判断当前是否是开发环境
 * @returns 是否是开发环境
 */
export function isDev(): boolean {
  return getEnv('ENV') === 'development';
}

/**
 * 判断当前是否是生产环境
 * @returns 是否是生产环境
 */
export function isProd(): boolean {
  return getEnv('ENV') === 'production';
}

/**
 * 获取当前环境名称
 * @returns 环境名称
 */
export function getEnvName(): string {
  return getEnv('ENV', 'development');
}

/**
 * 常用环境变量
 */
export const APP_ENV = {
  // 基础配置
  ENV: getEnvName(),
  BASE_URL: getEnv('BASE_URL', 'https://api-dev.example.com'),
  VERSION: getEnv('VERSION', '1.0.0'),
  TIMEOUT: getEnvNumber('TIMEOUT', 10000),

  // 存储相关
  STORAGE_PREFIX: getEnv('STORAGE_PREFIX', 'taro_vue3_'),

  // 业务配置
  ENABLE_LOG: getEnvBoolean('ENABLE_LOG', true),
  DEBUG: getEnvBoolean('DEBUG', false),

  // 第三方服务配置
  MAP_KEY: getEnv('MAP_KEY', ''),
};
